package com.gxy.learn.design.model.behaviour.template;

import lombok.extern.slf4j.Slf4j;

/**
 * @description: 抽象类 模版方法 基本方法
 * @author: gaoxueyong
 * @Date: 2022/11/8 11:37
 */
@Slf4j
public abstract class AbstractClass {
    /**
     * 模版炒菜方法
     *
     * @return void
     * @Author gaoxueyong
     * @Date 11:49 上午 2022/11/8
     * @Param []
     **/
    public final void coolprocess() {
        if(isCheckOil()){
            log.info("油是地沟油，不能炒菜，炒菜结束！");
            return;
        }
//        第一步:倒油
        this.pourOil();
//        第二步:热油
        this.heatOi1();
//        第三步:倒蔬菜
        this.pourVegetable();
//        第四步:倒调味料
        this.pourSauce();
//        第五步:翻炒
        this.fry();
    }

    /**
     * 倒油
     *
     * @return void
     * @Author gaoxueyong
     * @Date 11:53 上午 2022/11/8
     * @Param []
     **/
    public void pourOil() {
        log.info("倒油");
    }

    /**
     * 热油
     *
     * @return void
     * @Author gaoxueyong
     * @Date 11:54 上午 2022/11/8
     * @Param []
     **/
    public void heatOi1() {
        log.info("热油");
    }

    /**
     * 倒蔬菜
     *
     * @return void
     * @Author gaoxueyong
     * @Date 11:54 上午 2022/11/8
     * @Param []
     **/
    public abstract void pourVegetable();

    /**
     * 倒调料
     *
     * @return void
     * @Author gaoxueyong
     * @Date 11:54 上午 2022/11/8
     * @Param []
     **/
    public abstract void pourSauce();

    /**
     * 炒菜实现
     *
     * @return void
     * @Author gaoxueyong
     * @Date 11:54 上午 2022/11/8
     * @Param []
     **/
    public void fry() {
        log.info("炒啊炒啊炒到熟啊");
    }

    /**
     * 钩子函数 检查油品 默认不检查
     * @Author gaoxueyong
     * @Date 12:23 下午 2022/11/8
     * @Param []
     * @return boolean
     **/
    public boolean isCheckOil(){
        return false;
    }
}
